package audio

const (
	SampleTypeRole     = 1
	SampleTypeStyle    = 2
	SampleTypeLanguage = 3
)

// Microsoft Azure

type TtsMicrosoftAzureVoice struct {
	Id         string `json:"id"`
	Name       string `json:"name"`
	ShortName  string `json:"shortName"`
	Locale     string `json:"locale"`
	VoiceType  string `json:"voiceType"`
	Properties struct {
		Gender                    string `json:"Gender"`
		VoiceRoleNames            string `json:"VoiceRoleNames"`
		VoiceRoleNameDefinitions  string `json:"VoiceRoleNameDefinitions"`
		VoiceStyleNames           string `json:"VoiceStyleNames"`
		VoiceStyleNameDefinitions string `json:"VoiceStyleNameDefinitions"`
		DisplayName               string `json:"DisplayName"`
		LocalName                 string `json:"LocalName"`
		ShortName                 string `json:"ShortName"`
		SampleRateHertz           string `json:"SampleRateHertz"`
		FrontendVoiceType         string `json:"FrontendVoiceType"`
		AgeGroups                 string `json:"AgeGroups"`
		Personality               string `json:"Personality"`
		TailoredScenarios         string `json:"TailoredScenarios"`
		SecondaryLocales          string `json:"SecondaryLocales"`
		SupportedLocaleList       string `json:"SupportedLocaleList"`
		OrderInVoiceListApi       string `json:"OrderInVoiceListApi"`
		LocaleDescription         string `json:"LocaleDescription"`
		PreviewSentence           string `json:"PreviewSentence"`
		DisplayVoiceName          string `json:"DisplayVoiceName"`
		VoiceModelKind            string `json:"VoiceModelKind"`
		ReleaseScope              string `json:"ReleaseScope"`
		IsTtsBreakEnabled         string `json:"IsTtsBreakEnabled"`
	} `json:"properties"`
	Categories   []TtsMicrosoftAzureCategory    `json:"categories"`
	Masterpieces []TtsMicrosoftAzureMasterpiece `json:"masterpieces"`
	Samples      struct {
		LanguageSamples []TtsMicrosoftAzureLanguageSample `json:"languageSamples"`
		RoleSamples     []TtsMicrosoftAzureRoleSample     `json:"roleSamples"`
		StyleSamples    []TtsMicrosoftAzureStyleSample    `json:"styleSamples"`
	} `json:"samples"`
}
type TtsMicrosoftAzureCategory struct {
}
type TtsMicrosoftAzureMasterpiece struct {
}
type TtsMicrosoftAzureLanguageSample struct {
	Locale                   string `json:"locale"`
	AudioFileEndpointWithSas string `json:"audioFileEndpointWithSas"`
}
type TtsMicrosoftAzureRoleSample struct {
	RoleName                 string `json:"roleName"`
	AudioFileEndpointWithSas string `json:"audioFileEndpointWithSas"`
}
type TtsMicrosoftAzureStyleSample struct {
	StyleName                string `json:"styleName"`
	AudioFileEndpointWithSas string `json:"audioFileEndpointWithSas"`
}

// Microsoft Edge

type TtsMicrosoftEdgeVoice struct {
	Name           string `json:"Name"`
	ShortName      string `json:"ShortName"`
	Gender         string `json:"Gender"`
	Locale         string `json:"Locale"`
	SuggestedCodec string `json:"SuggestedCodec"`
	FriendlyName   string `json:"FriendlyName"`
	Status         string `json:"Status"`
	VoiceTag       struct {
		ContentCategories  []string `json:"ContentCategories"`
		VoicePersonalities []string `json:"VoicePersonalities"`
	} `json:"VoiceTag"`
}

// Aliyun

type TtsAliyunLingjieVoices struct {
	Data       []TtsAliyunLingjieVoice `json:"data"`
	ResultCode int                     `json:"resultCode"`
}
type TtsAliyunLingjieVoice struct {
	BGM               bool                `json:"bGM"`
	BaseModelId       int                 `json:"baseModelId"`
	Img               string              `json:"img"`
	Language          string              `json:"language"`
	PitchRate         int                 `json:"pitchRate"`
	SampleRate        int                 `json:"sampleRate"`
	Scene             string              `json:"scene"`
	Sequence          int                 `json:"sequence"`
	Sex               string              `json:"sex"`
	Speaker           string              `json:"speaker"`
	SpeakerId         string              `json:"speakerId"`
	SpeechFrom        string              `json:"speechFrom"`
	SpeechRate        int                 `json:"speechRate"`
	SpeechTtsModelKey string              `json:"speechTtsModelKey"`
	SpeechType        string              `json:"speechType"`
	Tag               string              `json:"tag"`
	Text              string              `json:"text"`
	Volume            int                 `json:"volume"`
	Emotions          []map[string]string `json:"emotions"`
}

// Tencent Qcloud

type TtsTencentQcloudVoice struct {
	CategoryVoiceList []struct {
		Category     string `json:"Category"`
		CategoryName string `json:"CategoryName"`
		VoiceList    []struct {
			VoiceGender     string  `json:"VoiceGender"`
			VoiceName       string  `json:"VoiceName"`
			VoiceDesc       string  `json:"VoiceDesc"`
			VoiceTag        string  `json:"VoiceTag"`
			VoiceHumanStyle string  `json:"VoiceHumanStyle"`
			VoiceText       string  `json:"VoiceText"`
			ExtraParam      *string `json:"ExtraParam"`
			VoiceType       int     `json:"VoiceType"`
		} `json:"VoiceList"`
	} `json:"CategoryVoiceList"`
	//TimbreTextList []struct {
	//	VoiceType        int    `json:"VoiceType"`
	//	VoiceName        string `json:"VoiceName"`
	//	TextList         string `json:"TextList"`
	//	EmotionStyleList string `json:"EmotionStyleList"`
	//} `json:"TimbreTextList"`
}

// Ifly

type TtsIflyVoice struct {
	Flag bool   `json:"flag"`
	Code int    `json:"code"`
	Desc string `json:"desc"`
	Data []struct {
		Id struct {
			Channel  string `json:"channel"`
			Code     string `json:"code"`
			Function string `json:"function"`
		} `json:"id"`
		Desc           string      `json:"desc"`
		Languages      string      `json:"languages"`
		Characteristic string      `json:"characteristic"`
		Fee            string      `json:"fee"`
		Extension      string      `json:"extension"`
		TimeExpired    interface{} `json:"timeExpired"`
		ValidTime      interface{} `json:"validTime"`
		LicState       interface{} `json:"licState"`
		PackageId      *int        `json:"packageId"`
	} `json:"data"`
}
